class Mvvm{
     constructor(options){
         // 一上来 把可用的东西挂载到实例上
         this.$el =options.el;
         this.$data =options.data;
         this.methods =options.methods;
         // 如果有要编译的模版 我就开始编译
         if(this.$el){
              // 数据劫持 把对象的所有属性 改成get 和set 方法
              new Observer(this.$data);
               this.proxyData(this.$data);
             // 用户数据和元素进行编译
             new Compile(this.$el,this)
         }
     }
     proxyData(data){
         Object.keys(data).forEach(key=>{
             Object.defineProperty(this,key,{
                 get(){
                     return data[key];
                 },
                 set(newValue){
                    data[key]=newValue;
                 }
             })
         })
     }
}